@--------------------------------------------------------------------------------------------------------
@ Fajl je napisan sa tabulacijom velicine 2 razmaka (podesiti editor radi preglednosti)
@ Komentari u ovom asembleru pocinju sa @ umjesto sa ;
@
@		Program prikazuje primjer formiranja programa za testiranje mehanizma virtuelne memorije.	
@
@		Za potrebe testiranja mehanizma virtuelne memorije, potrebno je napraviti test programe koji
@		ce se pokretati. Radi brzine rada sistema, test programi treba da budu formirani tako da se u svakoj 
@		stranici programa koristi samo prvih 512B. U nastavku je dat jedan program koji ce imati 3 stranice.
@		Korisan sadrzaj te 3 stranice je prikazan u okviru 3 sekcije: s1m, s2m, s3m. U procesu linkovanja
@		pojedinacne sekcije se smjestaju na adrese na kojima pocinju stranice (s1m -> 0x100000, s2m ->0x200000,
@		s3m -> 0x300000). Za potrebe mapiranja svake od sekcija, u skriptu "sct.ld" su za svaku sekciju navedene
@		sledece 4 linije:
@		. = 0xX00000;
@		sXstart = . ;
@		*(.section sXm)
@		sXend = . ;
@
@		,gdje je X redni broj stranice uvecan za 1 (u datom primjeru 1, 2, i 3).
@
@		U prvoj liniji se brojac lokacija postavlja na adresu na koju se zeli smjestiti sledeca sekcija. Potom se
@		u drugoj liniji pamti adresa pocetka korisnog sadrzaja stranice (isto sto i adresa pocetka stranice; pocetak
@		se pamti za potrebe kasnije provjere da li je velicina korisnog sadrzaja manja ili jednaka od 512B). Potom se
@		u trecoj liniji vrsi ukljucivanje odgovarajuce sekcije. U cetvrtoj liniji se pamti kraj korisnog sadrzaja
@		tekuce stranice.
@		Za svaku od stranica dodata je i po jedna ASSERT naredba koja vrsi provjeru zadovoljenosti ogranicenja
@		velicine korisnog sadrzaja svake stranice.
@		
@		U fajlu c je niz komandi kojima se dati program prevodi. Argument count u predzadnjem redu skripta "c"
@		definise velicinu programa (broj stranica koje program ima). Argument count se racuna kao
@		broj_stranica * 256.
@		U poslednjem redu, program se emituje u pripremljeni izlazni fajl i to tako da se preskoci prvi MB. Prvi
@		MB se preskace zato sto objcopy generise izlaz koji bi trebalo ucitati od adrese 0, a sadrzaj koji je
@		potreban pocinje tek na adresi prvog MB (0x100000).
@		Pored navedenog, za svaku stranicu je dodata po jedna ASSERT naredba koja provjerava ispunjenost pretpostavke
@		da ce korisni sadrzaj svake stranice biti unutar prvih 512B. Ukoliko velicina korisnog sadrzaja neke stranice
@		prekoraci 512B, ispisace se odgovarajuca poruka o gresci i prekinuti linkovanje.
@		Generisani izlaz je moguce kasnije provjeriti i disasembliranjem:
@		
@		arm-none-eabi-objdump -D -b binary -m arm test.bin
@
@		Voditi racuna da se u prethodnoj komandi treba koristiti fajl koji je izlaz komande objcopy jer je samo
@		u tom fajlu kod rasporedjen na iste adrese kao nakon ucitavanja.
@		Prilikom pravljenja test programa, citav program je potrebno izdjeliti u sekcije, tako da svaka sekcija
@		bude manja od 512B.
@		
@--------------------------------------------------------------------------------------------------------

.global _Reset


.section s1m

_Reset:						ldr r0, =rec 
						B l2m1        @ Prefetch
end:                                            ldr r0, =podatak
                                                ldr r3, [r0]
                                                ldr r0, =0x9
                                                str r1, [r0] 


.section s2m
l2m1:							ldr r1, [r0]  @ Prefetch i data
						        add r0,r1, #1
                                                        B l5m1        @ Prefetch
							str r1, [r0]  
						        B _Reset

.section s3m
rec: .word 8

.section s4m
l4m1:                  
                       ldr r0, =rec
                       str r4, [r0]
                       ldr r3, =broj
                       str r4, [r3]
                       B end           @ Prefetch


.section s5m
l5m1:                  B l7m1    @ Prefetch


.section s6m
broj: .word 10


.section s7m
l7m1:                 ldr r3, =broj
                      ldr r4, [r3]     @ Data
                      B l4m1           @Prefetch

.section s8m
podatak: .word 12

.end
 
